NDK ANativeWindow
介绍
ANativeWindow 是 Java 的 Surface 在 NDK C/C++ 层的等价物。
API
surface 转 ANativeWindow
接收 Java 侧 surface 对象,转为 ANativeWindow:
ANativeWindow* ANativeWindow_fromSurface(JNIEnv* env, jobject surface);
保存释放引用
保存释放 ANativeWindow 对象引用:
void ANativeWindow_acquire(ANativeWindow* window);
void ANativeWindow_release(ANativeWindow* window);
向 buffer 写入数据并提交
int32_t ANativeWindow_lock(ANativeWindow* window, ANativeWindow_Buffer* outBuffer, ARect* inOutDirtyBounds);
// 绘制代码
int32_t ANativeWindow_unlockAndPost(ANativeWindow* window);
其中:ANativeWindow_Buffer 是一个结构体。
在这个方法中,进行对 Surface 的绘图操作。所谓绘图,就是向结构体 buffer 中写入数据。写完了 unlickAndPost,进行上屏。
获取 Surface 尺寸和格式
int32_t ANativeWindow_getWidth(ANativeWindow* window);
int32_t ANativeWindow_getHeight(ANativeWindow* window);
int32_t ANativeWindow_getFormat(ANativeWindow* window);
Flutter 中的 ANativeWindow 操作
如果说 ANativeWindow_lock 和 ANativeWindow_unlockAndPost 用于绘制上屏,那么 Flutter Engine 也应该有这个调用才对,但是我再代码里为什么没找到呢?